『Linuxのしくみ 補改訂版』
https://gyazo.com/88526d25c9aeb0658ddbbfb2cd189fd4
2022/10/17
https://www.youtube.com/watch?v=Il6JLfJIV9E
序章 はじめに
第1章 Linuxの概要
プログラムとプロセス
カーネル
システムコール
システムコール発行の可視化
システムコールを処理している時間の割合
Column 監視、アラート、およびダッシュボード
システムコールの所要時間
ライブラリ
標準Cライブラリ
システムコールのラッパー関数
静的ライブラリと共有ライブラリ
Column 静的リンクの復権
第2章 プロセス管理(基礎編)
プロセスの生成
同じプロセスを2つに分裂させるfork()関数
別のプログラムを起動するexecve()関数
ASLRによるセキュリティ強化
プロセスの親子関係
Column fork()関数とexecve()関数以外のプロセス生成方法
プロセスの状態
プロセスの終了
ゾンビプロセスと孤児プロセス
シグナル
Column 絶対殺すSIGKILLシグナルと絶対死なないプロセス
シェルのジョブ管理の実現
セッション
プロセスグループ
デーモン
第3章 プロセススケジューラ
前提知識:経過時間と使用時間
1つの論理CPUだけを使う場合
複数の論理CPUを使う場合
realよりもuser+sysが大きくなるケース
タイムスライス
Column タイムスライスの仕組み
コンテキストスイッチ
性能について
プログラムの並列実行の重要性
第4章 メモリ管理システム
メモリ関連情報の取得
used
buff/cache
sarコマンドによるメモリ関連情報の取得
メモリの回収処理
プロセスの削除によるメモリの強制回収
仮想記憶
仮想記憶がない時の課題
仮想記憶の機能
仮想記憶による課題の解決
プロセスへの新規メモリの割り当て
メモリ領域の割り当て:mmap()システムコール
Column Meltdown脆弱性の恐怖
メモリの割り当て:デマンドページング
Column プログラミング言語処理系のメモリ管理
ページテーブルの階層化
ヒュージページ
トランスペアレントヒュージページ
第5章 プロセス管理(応用編)
プロセス作成処理の高速化
fork()関数の高速化:コピーオンライト
execve()関数の高速化:デマンドページング再び
プロセス間通信
共有メモリ
シグナル
パイプ
ソケット
排他制御
排他制御の堂々巡り
マルチプロセスとマルチスレッド
Column カーネルスレッドとユーザスレッド
第6章 デバイスアクセス
デバイスファイル
キャラクタデバイス
ブロックデバイス
Column ループデバイス
デバイスドライバ
メモリマップトI/O(MMIO)
ポーリング
割り込み
Column あえてポーリングを使う場合
デバイスファイル名は変わりうる
第7章 ファイルシステム
ファイルへのアクセス方法
メモリマップトファイル
一般的なファイルシステム
容量制限(クォータ)
ファイルシステムの整合性保持
ジャーナリングによる不整合の防止
コピーオンライトによる不整合の防止
一にも二にもバックアップ
Btrfsが提供するファイルシステムの高度な機能
スナップショット
マルチボリューム
Column 結局どのファイルシステムを使えばいいのか
データ破壊の検知/修復
その他のファイルシステム
メモリベースのファイルシステム
ネットワークファイルシステム
procfs
sysfs
第8章 記憶階層
キャッシュメモリ
参照の局所性
階層型キャッシュメモリ
キャッシュメモリへのアクセス速度の計測
Simultaneous Multi Threading(SMT)
Column Translation Lookaside Buffer
ページキャッシュ
ページキャッシュの効果
バッファキャッシュ
書き込みのタイミング
direct I/O
スワップ
統計情報
第9章 ブロック層
HDDの特徴
ブロック層の基本機能
ブロックデバイスの性能指標と測定方法
1プロセスだけがI/O発行する場合
複数プロセスが並列にI/O発行する場合
Column 推測するな、測定せよ
性能測定ツール:fio
ブロック層がHDDの性能に与える影響
パターンAの測定結果
パターンBの測定結果
Column 何のための性能測定
技術革新に伴うブロック層の変化
ブロック層がNVMe SSDの性能に与える影響
パターンAの測定結果
パターンBの測定結果
Column 現実世界の性能測定
第10章 仮想化機能
仮想化機能とは何か
仮想化ソフトウェア
本章で使う仮想化ソフトウェア
Column Nested Virtualization
仮想化を支援するCPUの機能
QEMU+KVMの場合
Column CPUによる仮想化機能が存在しない場合の仮想化
仮想マシンは、ホストOSからどう見えているか?
ホストOSから見たゲストOS
複数マシンを立ち上げた場合
Column IaaSにおけるオートスケールの仕組み
仮想化環境のプロセススケジューリング
物理マシン上でプロセスが動いている場合
統計情報
仮想マシンとメモリ管理
仮想マシンが使うメモリ
仮想マシンとストレージデバイス
仮想マシンにおけるストレージI/O
ストレージデバイスへの書き込みとページキャッシュ
準仮想化デバイスとvirtio-blk
Column ホストOSとゲストOSでストレージI/O性能が逆転?
virtio-blkの仕組み
Column PCIパススルー
第11章 コンテナ
仮想マシンとの違い
コンテナの種類
namespace
pid namespace
コンテナの正体
セキュリティリスク
第12章 cgroup
cgroupが制御できるリソース
使用例:CPU使用時間の制御
Column cgroup機能のLinuxカーネルへの取り込み経緯
応用例
Column cgroup v2
終章 本書で学んだことと今後への生かし方